The most widely used communication protocol for reliable data delivery in the Internet is Transmission Control Protocol (TCP). In data networks, network congestion occurs when a link or node is carrying so much data that its quality of service deteriorates. The TCP comprises congestion control mechanisms, which aim at achieving good bandwidth utilization while avoiding congestion collapses during which the performance of a network can fall by several orders of magnitude.
The TCP congestion control mechanisms assume that packet drops are caused by congestion. Upon detection of packet drops, a TCP sending node will slow down its transmission speed, trying to relieve the congestion. On the other hand, in order to achieve better bandwidth utilization, the TCP sending node will try to increase its transmission speed if packets are successfully delivered. In most cases, the increment of transmission speed will end up with packet drops due to congestion, and then the transmission speed is lowered again.
In addition to the TCP sending nodes and receiving nodes, intermediate network nodes such as routers and switches can also be involved in TCP congestion control mechanisms in order to achieve an improved end to end quality of service. Two major congestion control mechanisms are widely recognized: Random Early Drop (RED) and Explicit Congestion Notification (ECN).
The RED is designed to prevent the effect of TCP “global synchronization”, wherein almost all TCP sending nodes slow down their transmission speed simultaneously upon detecting congestion, and almost all TCP sending nodes then also increase their transmission speed simultaneously. The network will switch between under-utilized and congested state. With RED, the intermediate network node will randomly drop TCP packets at an early stage of congestion, thereby slowing down some of the TCP sending nodes. The dropping probability increases as the congestion status is growing more severe. The RED is thus trying to prevent the network nodes to enter a severe congestion state and also avoid a global synchronization.
ECN is another mechanism for avoiding congestion. ECN is an extension of TCP which needs the support of the TCP sending node, the TCP receiving node and intermediate ECN enabled nodes (e.g. routers or switches).
FIG. 1 illustrates the principles of the ECN. In a network implementing ECN, the TCP sending node 1 (source) sends (arrow A1) a packet with ECN capable transport (ECT) code point in the Differentiated services code point (DSCP) in the packet header. The packet reaches an ECN enabled node 2, and if experiencing congestion, the ECN enabled node 2 modifies the DSCP to Congestion Experienced (CE) and forwards the packet (arrow A2). A TCP receiving node 3 (receiver) receives the packet having CE in a header field, and sets an ECN echo (ECE) flag in the TCP header in following TCP packets (Arrow A3). The TCP sending node 1 receives the TCP packet comprising the ECE flag and reduces its congestion window and sends a TCP packet comprising a Congestion Window Reduced (CWR) flag in response (Arrow A4). The CWR flag informs the TCP receiving node 3 that the congestion notification has been processed.
A basic distinction between RED and ECN is that ECN allows end-to-end notification of network congestion without dropping packets. However, in the ECN congestion control mechanism a sending node may keep sending IP packets for a while with the same IP packet transmission speed. This can worsen the congestion situation and cause packet drops. The sending node keeps sending the IP packets until being notified about the congestion, upon which it can reduce its transmission speed.